package com.eistert.java.algorithm.dac;

/**
 * 汉诺塔实验
 *
 * @Author: ai
 * @create: 2023-04-25 16:10
 */
public class Hanoitower {

    public Hanoitower() {
    }

    public static void main(String[] args) {
        hanoiTowner(5, 'A', 'B', 'C');
    }


    /**
     * 汉诺塔的移动的方法
     * 思路：
     * 1)如果是有一个盘， A->C.
     * 如果我们有 n >= 2  情况，我们总是可以看做是两个盘 1.最下边的盘。2.  上面的第一个盘
     * <p>
     * 2)先把 最上面的盘 A->B。
     * 3)把最下边的盘 A->C。
     * 4)把 B 塔的所有盘 从 B->C
     *
     * @param num 总共有几个盘
     * @param a   第一根圆柱
     * @param b   第二根圆柱
     * @param c   第三根圆柱
     */
    public static void hanoiTowner(int num, char a, char b, char c) {
        if (num == 1) {
            System.out.println("第一个盘从 " + a + "->" + c);
        } else {
            hanoiTowner(num - 1, a, c, b);
            System.out.println("第" + num + "个盘从" + a + "->" + c);
            hanoiTowner(num - 1, b, a, c);
        }
    }
}
